home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / msh-156.lha / dev / device1.a < prev    next >
Text File  |  1996-12-22  |  5KB  |  231 lines

  1. ; $Id: device1.a,v 1.56 1996/12/21 23:34:35 Rhialto Rel $
  2. ; $Log: device1.a,v $
  3. ; Revision 1.56  1996/12/21  23:34:35  Rhialto
  4. ; Add own BeginIO since the new DICE one seems to be buggy.
  5. ;
  6. ; Revision 1.55  1993/12/30  22:45:10  Rhialto
  7. ; Change return code when loaded from CLI.
  8. ; Remove xref _InitTable.
  9. ; Freeze for MAXON5.
  10. ;
  11. ; Revision 1.54  1993/06/24  04:56:00  Rhialto
  12. ; Switch to RTF_AUTOINIT, saves a few bytes. DICE 2.07.54R.
  13. ;
  14. ; Revision 1.53  92/10/25  02:08:55  Rhialto
  15. ; Import UNITB_ACTIVE and HANDLE_IO_QUICK.
  16. ;
  17. ; Revision 1.51  92/04/17  15:41:30  Rhialto
  18. ; Freeze for MAXON3.
  19. ;
  20. ; Revision 1.46  91/10/06  18:25:18  Rhialto
  21. ;
  22. ; Freeze for MAXON
  23. ;
  24. ; Revision 1.42  91/06/14  00:08:48  Rhialto
  25. ; DICE conversion
  26. ;
  27.         include    "c.i"
  28. ;;;;
  29. ;
  30. ;   Some constants that need to be modified on specific versions
  31.  
  32. RTPRI        equ     0
  33.  
  34. ;;;;
  35. ;
  36. ; The first executable location. This should return an error in case
  37. ; someone tried to run you as a program (instead of loading you as a
  38. ; device)
  39.  
  40.     section text,code
  41.  
  42.     moveq.l #-1,d0
  43.     rts
  44.  
  45. ;;;;
  46. ;
  47. ; A romtag structure. Both "exec" and "ramlib" look for this structure to
  48. ; discover magic constants about you (such as where to start running you
  49. ; from...).
  50. ;
  51.     xref    _DevName
  52.     xref    _idString
  53.     xdef    _RomTag
  54. _RomTag:
  55.     dc.w    RTC_MATCHWORD
  56.     dc.l    _RomTag     ; rt_MatchTag
  57.     dc.l    EndCode     ; rt_EndSkip
  58.     dc.b    RTF_AUTOINIT    ; rt_Flags
  59.     dc.b    VERSION     ; rt_Version
  60.     dc.b    NT_DEVICE    ; rt_Type
  61.     dc.b    RTPRI        ; rt_Pri
  62.     dc.l    _DevName    ; rt_Name
  63.     dc.l    _idString    ; rt_IdString
  64.     dc.l    Init        ; rt_Init
  65.  
  66.     xref    @Init
  67. Init:
  68.     dc.l    md_SIZEOF    ; size of data portion of Device
  69.     dc.l    LibVectors    ; pointer to function initialisers
  70.     dc.l    InitTable    ; pointer to data initialisers
  71.     dc.l    @Init        ; routine to run (d0: dev ptr, a0: seglist)
  72.  
  73.     xref     @DevOpen,@DevClose,@DevExpunge
  74.     xref     @DevBeginIO
  75.     xref     @DevAbortIO
  76. LibVectors:
  77.     dc.l    @DevOpen,@DevClose,@DevExpunge,LibNull
  78.     dc.l    @DevBeginIO
  79.     dc.l    @DevAbortIO
  80.     dc.l    -1
  81.  
  82. INITBYTE    MACRO    ; &offset,&value
  83.         IFLE    (\1)-255        ;If offset <=255
  84.         DC.B    $a0,\1        ;use byte offset
  85.         DC.B    \2,0
  86.         MEXIT            ;exit early
  87.         ENDC
  88.         DC.B    $e0,0
  89.         DC.W    \1
  90.         DC.B    \2,0
  91.         ENDM
  92.  
  93. INITWORD    MACRO    ; &offset,&value
  94.         IFLE    (\1)-255        ;If offset <=255
  95.         DC.B    $90,\1        ;use byte offset
  96.         DC.W    \2
  97.         MEXIT            ;exit early
  98.         ENDC
  99.         DC.B    $d0,0
  100.         DC.W    \1
  101.         DC.W    \2
  102.         ENDM
  103.  
  104. INITLONG    MACRO    ; &offset,&value
  105.         IFLE    (\1)-255        ;If offset <=255
  106.         DC.B    $80,\1        ;use byte offset
  107.         DC.L    \2
  108.         MEXIT            ;exit early
  109.         ENDC
  110.         DC.B    $c0,0
  111.         DC.W    \1
  112.         DC.L    \2
  113.         ENDM
  114.  
  115. InitTable:
  116.     INITBYTE ln_Type,NT_DEVICE
  117.     INITLONG ln_Name,_DevName
  118.     INITBYTE dev_Flags,LIBF_CHANGED!LIBF_SUMUSED,
  119.     INITWORD dev_Version,VERSION
  120.     INITWORD dev_Revision,REVISION
  121.     INITLONG dev_IdString,_idString
  122.     dc.w    0
  123.  
  124. ;;;;
  125. ;
  126. ; Here begin the system interface commands. When the user calls
  127. ; OpenDevice/CloseDevice/RemDevice, this eventually gets trahslated into
  128. ; a call to the following routines (Open/Close/Expunge).  Exec has
  129. ; already put our device pointer in A6 for us.    Exec has turned off task
  130. ; switching while in these routines (via Forbid/Permit), so we should not
  131. ; take too long in them.
  132. ;
  133. ; These glue routines are not necessary when using the special
  134. ; __D0 keywords of DICE. When we do use these, don't forget to make sure
  135. ; the C routines expect the arguments on the stack (i.e. __stkargs)
  136.  
  137.     ifne    0
  138.     xdef    Init
  139.     xref    _Init
  140. Init:                ;a0=segment list
  141.     move.l    A0,-(sp)
  142.     jsr    _Init
  143.     addq    #4,sp
  144.     rts
  145.  
  146.     xdef    DevOpen
  147.     xref    _DevOpen
  148. DevOpen:            ;d0=unitnum,d1=flags,a1=ioreq,a6=device
  149.     movem.l D0-D1/A1/A6,-(sp)
  150.     jsr    _DevOpen
  151.     lea    16(sp),sp
  152.     rts
  153.  
  154.     xdef    DevClose
  155.     xref    _DevClose
  156. DevClose:            ;a1=ioreq,a6=device
  157.     movem.l A1/A6,-(sp)
  158.     jsr    _DevClose
  159.     addq    #8,sp
  160.     rts
  161.  
  162.     xdef    DevExpunge
  163.     xref    _DevExpunge
  164. DevExpunge:            ;a6=device
  165.     movem.l A6,-(sp)
  166.     jsr    _DevExpunge
  167.     addq    #4,sp
  168.     rts
  169.  
  170.     xdef    DevBeginIO
  171.     xref    _DevBeginIO
  172. DevBeginIO:            ;a1=ioreq,a6=device
  173.     movem.l A1/A6,-(sp)
  174.     jsr    _DevBeginIO
  175.     addq    #8,sp
  176.     rts
  177.  
  178.     xdef    DevAbortIO
  179.     xref    _DevAbortIO
  180. DevAbortIO:            ;a1=ioreq,a6=device
  181.     movem.l A1/A6,-(sp)
  182.     jsr    _DevAbortIO
  183.     addq    #8,sp
  184.     rts
  185.     endc
  186.  
  187. LibNull:
  188.     clr.l    d0
  189.     rts
  190.  
  191.     ifne    HANDLE_IO_QUICK
  192. ;;;;
  193. ;
  194. ;   C interface to the atomic set bit and test old value instruction.
  195. ;
  196. ;   Called as    BSET_ACTIVE(byte *address).
  197. ;
  198. ;   Old value of the bit returned all over d0.w
  199.  
  200.     xdef    _BSET_ACTIVE
  201.     xdef    @BSET_ACTIVE
  202. _BSET_ACTIVE:
  203.     move.l    4(sp),a0
  204. @BSET_ACTIVE:
  205.     bset    #UNITB_ACTIVE,(a0)         ; 0 UNITB_ACTIVE
  206.     sne    d0
  207.     rts
  208.     endc    ; HANDLE_IO_QUICK
  209.  
  210.         ;   BeginIO(ior)
  211.  
  212.         section text,code
  213.  
  214.         xdef    _hyper_BeginIO
  215.         xdef    _BeginIO
  216.         xdef    @BeginIO
  217.  
  218. _hyper_BeginIO:
  219. _BeginIO:
  220.         move.l    4(sp),A0
  221. @BeginIO:
  222.         move.l    A6,-(sp)
  223.         move.l    A0,A1
  224.         move.l    $14(A0),A6   ; io_Device
  225.         jsr    -30(A6)
  226.         move.l    (sp)+,A6
  227.         rts
  228.  
  229. EndCode
  230.     end
  231.